#ifndef GUARD_DEBUGGER
#define GUARD_DEBUGGER

#include <stdio.h>
#include <stdlib.h>
#include "../memory/memory.h"
#include "../cpu/cpu.h"

typedef struct
{
	Cpu *cpu;
	Memory *memory;
	Controller *controller;
	unsigned short mem_start;
} Debugger;

Debugger *new_debugger(Cpu *cpu, Controller *controller, Memory *memory);

void debugger_main_loop(Debugger *debugger);

//Load Program this will prompt for a filename
void debugger_load_program(Debugger *debugger);

//Run Program runs the next step of the program
void debugger_run_program(Debugger *debugger);

//Clear Memory Block
void debugger_clear_memory_block(Debugger *debugger);


//Exit


//refresh the screen
void debugger_update(Debugger *debugger);

//ask the user for a command to run
int debugger_prompt_command(Debugger *debugger);


void debugger_show_mem(Debugger *debugger);


void debugger_clear_mem(Debugger *debugger);


#endif
